package com.weixing.mall.provider.controller.sys;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.weixing.mall.base.enums.WhetherEnum;
import com.weixing.mall.base.wrapper.Result;
import com.weixing.mall.base.wrapper.ResultUtil;
import com.weixing.mall.core.annotation.NoRepeatSubmit;
import com.weixing.mall.core.support.BaseController;
import com.weixing.mall.provider.api.model.enums.CfgTypeEunm;
import com.weixing.mall.provider.api.model.vo.SysConfigVo;
import com.weixing.mall.provider.model.domain.Config;
import com.weixing.mall.provider.model.dto.sys.SysConfigChgEnableDto;
import com.weixing.mall.provider.model.dto.sys.SysConfigDto;
import com.weixing.mall.provider.model.query.SysCfgQuery;
import com.weixing.mall.provider.service.IConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 数据开关接口
 *
 * @author  wx
 * @date  2019/7/29 17:26
 * @since  1.0
 */
@RestController
@RequestMapping("cfg")
public class SysConfigController extends BaseController {

    @Autowired
    private IConfigService sysConfigService;

    /**
     * 加载数据开关
     * @param cfgQuery 查询条件
     * @return 结果
     */
    @GetMapping("")
    public Result<IPage<SysConfigVo>> list(SysCfgQuery cfgQuery){
        return ResultUtil.success(sysConfigService.selectOfPage(initMpPage(),cfgQuery));
    }

    /**
     * 添加/修改
     * @param sysConfigDto 参数
     * @return 结果
     */
    @PostMapping("save")
    @NoRepeatSubmit
    public Result save(@Validated SysConfigDto sysConfigDto){
        if (null == sysConfigDto.getId()){
            Config sysConfig = sysConfigService.selectByCfgCode(sysConfigDto.getCfgCode());
            if (null != sysConfig){
                return ResultUtil.error("已存在同名设置");
            }
        }
        if (sysConfigDto.getCfgType().equals(CfgTypeEunm.DATA_NUMBER) && null == sysConfigDto.getUnit()){
            return ResultUtil.error("单位不能为空");
        }
        sysConfigService.save(sysConfigDto);
        return ResultUtil.success();
    }

    /**
     * 删除数据开关
     * @param id id
     * @return 删除结果
     */
    @PostMapping("del/{id}")
    public Result del(@PathVariable Long id){
        Config byId = sysConfigService.getById(id);
        byId.setIsDel(WhetherEnum.YES.getValue());
        sysConfigService.updateById(byId);
        return ResultUtil.success();
    }

    /**
     * 启用/禁用
     * @param sysConfigChgEnableDto 启用禁用
     * @return 结果
     */
    @PostMapping("changeEnable")
    public Result changeEnable(SysConfigChgEnableDto sysConfigChgEnableDto){

        sysConfigService.changeEnable(sysConfigChgEnableDto.getId(),sysConfigChgEnableDto.getIsEnableEnum().getValue());
        return ResultUtil.success();
    }

    /**
     * 根据名字查询开关状态
     * @param name 配置名称
     * @return 结果
     */
    @PostMapping("selectCfgTypeByName/{name}")
    public Result selectCfgTypeByName(@PathVariable String name){
        return ResultUtil.success(sysConfigService.selectCfgTypeByName(name));
    }
}
